# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.68)
AC_INIT([Liblouis], [3.19.0], [liblouis-liblouisxml@freelists.org], [liblouis], [http://www.liblouis.org])
AC_CONFIG_SRCDIR([liblouis/lou_backTranslateString.c])
AM_CONFIG_HEADER(liblouis/config.h)

AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([-Wall dist-zip])

# Checks for programs.
# Try to compile using C99
AC_PROG_CC_C99

# gnulib for the library
gl_EARLY
# gnulib for the tools
gl_tools_EARLY

gl_INIT
gl_tools_INIT

# Checks for more programs.
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AM_PROG_AR

# Check if the user wants to enable yaml tests
AC_ARG_WITH([yaml],
  [AS_HELP_STRING([--with-yaml], [enable YAML-based tests @<:@default=yes@:>@])],
  [with_yaml=$withval],
  [])

# Checks for libraries.
if test "x$with_yaml" == xno; then
  AC_DEFINE([WITHOUT_YAML],[1],[Disable YAML tests])
else
  AC_CHECK_LIB([yaml], [yaml_parser_initialize])
fi

AM_CONDITIONAL([WITH_YAML], [test "x$ac_cv_lib_yaml_yaml_parser_initialize" == xyes -a "x$with_yaml" != xno])

# If libyaml is missing warn or die depending on --with-yaml
if test x$ac_cv_lib_yaml_yaml_parser_initialize != xyes; then
  case "$with_yaml" in
  yes) AC_MSG_ERROR([--with-yaml was given, but libyaml was not found]);;
  no) ;;
  *) AC_MSG_WARN([libyaml was not found. YAML tests will be skipped]);;
  esac
fi

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST

# Checks for library functions.
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([memset])

# This is for stuff that absolutely must end up in pyconfig.h.
# Please use pyport.h instead, if possible.
AH_TOP([
#ifndef LOUISCFG_H
#define LOUISCFG_H
])
AH_BOTTOM([
#endif /*LOUISCFG_H*/
])

# increment if the interface has additions, changes, removals.
LIBLOUIS_CURRENT=20

# increment any time the source changes; set to 0 if you increment
# CURRENT
LIBLOUIS_REVISION=7

# increment if any interfaces have been added; set to 0 if any
# interfaces have been changed or removed. removal has precedence over
# adding, so set to 0 if both happened.
LIBLOUIS_AGE=0

AC_SUBST(LIBLOUIS_CURRENT)
AC_SUBST(LIBLOUIS_REVISION)
AC_SUBST(LIBLOUIS_AGE)

# needed to build the liblouis.def
DLL_VERSION=`expr ${LIBLOUIS_CURRENT} - ${LIBLOUIS_AGE}`
AC_SUBST(DLL_VERSION)

AC_ISC_POSIX
AC_HEADER_STDC
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL

# catch as many warnings as possible with the help of the gnulib manywarnings module
gl_MANYWARN_ALL_GCC([warnings])
# Set up the list of the pointless, undesired warnings.
nw=
nw="$nw -Wsystem-headers"       # Don't let system headers trigger warnings
nw="$nw -Wsuggest-attribute=pure"   # ignore recommendations to use
nw="$nw -Wsuggest-attribute=format" # attributes, most of these only
nw="$nw -Wsuggest-attribute=const"  # work in gcc
nw="$nw -Wsuggest-attribute=noreturn"
# Enable all GCC warnings not in this list.
gl_MANYWARN_COMPLEMENT([warnings], [$warnings], [$nw])
for w in $warnings; do
  gl_WARN_ADD([$w])
done

# define an additional recursive make target to format the sources.
# Also check if clang-format is installed
AM_EXTRA_RECURSIVE_TARGETS([format-sources])
# prefer version 7 of clang-format
AC_CHECK_PROGS([SOURCE_FORMATTER], [clang-format-7 clang-format])
AM_CONDITIONAL([HAVE_SOURCE_FORMATTER], [test x$SOURCE_FORMATTER = xclang-format])

# GNU help2man creates man pages from --help output; in many cases,
# this is sufficient, and obviates the need to maintain man pages
# separately. However, some developers do not have it so we do not
# make its use mandatory.
if test "x$cross_compiling" = xyes; then
  AC_MSG_WARN([cannot generate manual pages while cross compiling])
else
  AC_CHECK_PROG([HELP2MAN], [help2man], [help2man])
fi
AM_CONDITIONAL([HAVE_HELP2MAN], [test x$HELP2MAN = xhelp2man])

# Only run parts of the tests if we are cross compiling
AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes])

# Check for makeinfo version >= 5, required for building documentation.
have_makeinfo_5=false
AC_PROG_SED
AC_CHECK_PROG([MAKEINFO_FOUND], [makeinfo], [yes])
if test x"${MAKEINFO_FOUND}" = xyes
then
  MAKEINFO_VERSION_REQ=5
  AC_MSG_CHECKING([for makeinfo version >= $MAKEINFO_VERSION_REQ])
  MAKEINFO_VERSION=`makeinfo --version | sed -ne 's/^\(makeinfo\|texi2any\) .* \([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*.*$/\2/p'`
  if test x$MAKEINFO_VERSION = x -o 0$MAKEINFO_VERSION -lt $MAKEINFO_VERSION_REQ
  then
    AC_MSG_RESULT([no])
    AC_MSG_WARN([Program 'makeinfo' version >= $MAKEINFO_VERSION_REQ is required. Documentation will not be built.])
  else
    AC_MSG_RESULT([yes])
    have_makeinfo_5=true
  fi
else
  AC_MSG_WARN([Missing program 'makeinfo', Documentation will not be built. Please install you you want documentation or refer to online resources.])
fi
AM_CONDITIONAL([HAVE_MAKEINFO_5], [test x$have_makeinfo_5 = xtrue])

AC_ARG_ENABLE(ucs4,
              AC_HELP_STRING(--enable-ucs4, Enable 4 byte-wide characters),
              [AC_DEFINE([WIDECHARS_ARE_UCS4], [1], [Define if widechars are ucs4])],
              [enable_ucs4=no])

AC_MSG_CHECKING([whether 4 byte-wide characters should be supported])
AC_MSG_RESULT($enable_ucs4)

case "$enable_ucs4" in
yes) WIDECHAR_TYPE='unsigned int';;
*) WIDECHAR_TYPE='unsigned short int';;
esac
AC_SUBST(WIDECHAR_TYPE)
AM_CONDITIONAL([HAVE_UCS4], [test x$enable_ucs4 = xyes])

case $host in
  *mingw* | *cygwin*)
    CFLAGS="$CFLAGS -Wl,--add-stdcall-alias"
    LDFLAGS="$LDFLAGS -avoid-version"
  ;;
esac

AC_CANONICAL_HOST
build_macosx=no
case $host_os in
  darwin*)
    build_macosx=yes
  ;;
esac
AM_CONDITIONAL([OSX], [test "$build_macosx" = "yes"])

AC_CONFIG_FILES([
	Makefile
	doc/Makefile
	man/Makefile
	liblouis/Makefile
	liblouis/liblouis.h
	windows/Makefile
	windows/include/Makefile
	windows/utils/Makefile
	tables/Makefile
	liblouis.pc
	tests/Makefile
	tests/braille-specs/Makefile
	tests/resolve_table.h
	tests/tables/Makefile
	tests/tables/emphclass/Makefile
	tests/tables/attribute/Makefile
	tests/tables/moreTables/Makefile
	tests/tables/resolve_table/Makefile
	tests/tables/resolve_table/dir_1/Makefile
	tests/tables/resolve_table/dir_1/dir_1.1/Makefile
	tests/tables/resolve_table/dir_2/Makefile
	tests/tablesWithMetadata/Makefile
	tests/ueb_test_data/Makefile
	tests/yaml/Makefile
	python/Makefile
	python/setup.py
	python/louis/Makefile
	tools/Makefile
	tools/gnulib/Makefile
	tools/lou_maketable.d/Makefile
	tools/lou_maketable.d/lou_maketable
	gnulib/Makefile])
AC_OUTPUT
